
#include "testcase.h"

#include "bups.h"

#include <iostream>

using namespace Tester;

class BUPSTest : public TestCase<BUPSTest> {
   private:
      int orden;

   public:
      BUPSTest() : TestCase<BUPSTest>("Test de Base-Uniforme-Periodica-Spline (BUPS)", __FILE__){
         orden = 4;

         add("Suma de bases", &BUPSTest::sumatoriaAUno);
      }

      void sumatoriaAUno() {

         BUPS base(orden);
         int limite = orden+5;  //"limite" >= orden
   
         //Desde t = "orden-1" hasta "limite" las bases cierran a 1
         for(float t = orden-1; t < limite; t += 0.25){
            float suma = 0;

            //Si "t" esta dentro del rango especificado, 
            //las bases_i con i entre "int(t) - grado y int(t) + 1" aportan un
            //valor distinto de 0, el resto de las bases son nulas
            for(int i = int(t) - orden + 1; i < int(t) + 1; ++i){
               suma += base.base(i, t);
            }

            assertTrue(int(suma + 0.001) == 1);
         }
      }
};

namespace {
   BUPSTest test;
}

